#ifndef WIDGET_H
#define WIDGET_H

#include "mycombobox.h"


#include <QWidget>
#include <QDebug>
#include <QSerialPort>
#include <QMessageBox>
#include <QTime>
#include <QTimer>
#include <QDateTime>
#include <QCheckBox>
#include <QLineEdit>
#include <QSystemTrayIcon>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
protected:
    void closeEvent(QCloseEvent *event) override;

private slots:
    //打开/关闭串口
    void on_pushButton_OpenorCloseSerial_clicked();
    //发送按钮
    void on_btn_send_clicked();
    //串口读取数据
    void on_readyRead();
    //定时发送，checkbox对应的槽函数
    void on_checkBox_TimeSend_clicked(bool checked);
    //定时发送
    void on_TimeOut();
    //设置当前时间
    void on_CurrentTime();
    //清除历史记录
    void on_pushButton_ClearReciver_clicked();
    //保存历史记录
    void on_pushButton_SaveReciver_clicked();
    //显示接收时间
    void on_checkBox_ReciverTime_clicked(bool checked);
    //hex显示
    void on_checkBox_HEXShow_clicked(bool checked);

    //一个按钮的两种切换发送
//    void on_pushButton_hideWid_clicked();

//    void on_pushButton_hidehistory_clicked();


    void on_pushButton_hideWid_clicked(bool checked);
    void on_pushButton_hidehistory_clicked(bool checked);

    //多文本中的按钮发送
    void on_pushBtton_text_clicked();
    //循环发送
    void on_checkBox_SSend_clicked(bool checked);
    //循环发送操作
    void on_btnTimeHander();
    //保存多文本记录
    void on_pushButton_Save_clicked();
    //加载文本记录
    void on_pushButton_Load_clicked();
    //重载多文本
    void on_pushButton_reset_clicked();
    //刷新端口
    void refresh_SerialName();


    void onShowWindow();    // 显示主窗口
    void onExitApp();       // 退出应用程序
private:
    QString getCurTime();
private:
    QSerialPort *serialPort;
    int SendAllSizeCnt;    //发送的总字节大小
    int ReceiveAllSizeCnt;  //接收的总字节大小

    QString oldMsg;            //原来的文本
    QTimer *timer;
    QTimer *curTimer;     //时间
    QTimer *allBtnTimer;  //循环发送
    int buttonIndex;      //多文本按钮
    QList<QString> normText;   //正常的发送文本
    QList<QString> timeText;   //带有时间的发送文本
    QList<QByteArray> hexText; //16进制的文本
    QList<QByteArray> timeHexText; //时间+hex文本
    int sendStatus;       //发送的状态，上面的4种

    bool hideText;        //标准位  隐藏多文本面板
    bool hideHistory;     //标准位  隐藏历史记录

    QList<QPushButton *> btns;    //存放多文本中的多个按钮
    QList<QCheckBox*> checkBoxs;  //存放多文本中的多个复选框
    QList<QLineEdit*> lineEdits;  //存放多文本中的多个单行输入框

    QSystemTrayIcon *trayIcon; // 托盘图标
    QMenu *trayMenu;           // 托盘菜单
private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
